package com.flyqiu.form.api.col;

import com.flyqiu.form.common.col.SqlColType;

/**
 * 存储服务列类型映射管理
 */
public interface FlyQiuStoreColTypeManage {
    /**
     * 注册存储列类型
     *
     * @param storeColType 存储列类型处理器
     */
    default void registerStoreColType(FlyQiuStoreColTypeMapper storeColType) {
        registerStoreColType(storeColType.getStorageKey(), storeColType);
    }

    /**
     * 注册存储列类型
     *
     * @param storeType    存储类型
     * @param storeColType 存储列类型处理器
     */
    void registerStoreColType(String storeType, FlyQiuStoreColTypeMapper storeColType);

    /**
     * 解除注册存储列类型
     *
     * @param storeType 存储类型
     */
    void unregisterStoreColType(String storeType);

    /**
     * 获取存储列类型
     *
     * @param storeType 存储类型
     * @param colType   列类型
     * @return {@link SqlColType}
     */
    default SqlColType getStoreColType(String storeType, String colType) {
        return getStoreColType(storeType, colType, true);
    }

    /**
     * 获取存储列类型
     *
     * @param storeType 存储类型
     * @param colType   列类型
     * @param isThrow   未获取到时是否抛出异常
     * @return {@link SqlColType}
     */
    SqlColType getStoreColType(String storeType, String colType, boolean isThrow);

}
